package com.easpeed.elevator.ui;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.util.Log;
import com.bigyu.utils.Logger;

import androidx.appcompat.widget.AppCompatImageView;

public class ArrowImageView extends AppCompatImageView {
    private float leftX;   // 坐标系左侧位置（绝对像素值）
    private float rightX;  // 坐标系右侧位置（绝对像素值）
    private float startX;  // 箭头起始位置（绝对像素值）
    private float endX;    // 箭头结束位置（绝对像素值）

    private Paint paint;
    private Paint textPaint; // 用于绘制文本
    private Path path;

    public ArrowImageView(Context context) {
        super(context);
        init();
    }

    public ArrowImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public ArrowImageView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        paint = new Paint();
        paint.setColor(0xFF000000); // 箭头颜色
        paint.setStyle(Paint.Style.FILL);
        paint.setStrokeWidth(3); // 箭头线宽

        textPaint = new Paint();
        textPaint.setColor(0xFF000000); // 文本颜色
        textPaint.setTextSize(28); // 文本大小

        path = new Path();
    }

    public void setArrowParams(float leftX, float rightX, float startX, float endX) {
        this.leftX = leftX;
        this.rightX = rightX;
        this.startX = startX; // 直接使用绝对位置
        this.endX = endX;     // 直接使用绝对位置
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (leftX == 0 && rightX == 0) {
            return;
        }
        // 获取视图高度
        float height = getHeight();

        // 计算箭头的 Y 坐标（高度为视图的 2/3）
        float arrowY = height * 2 / 5;

        //要先于变换前计算距离
        float distance = endX - startX;

        int width = getWidth();
        if ((rightX - leftX) > width) {
            double ratio = (rightX - leftX) / width;
            startX = (float) ((startX - leftX) / ratio);
            endX = (float) ((endX - leftX) / ratio);
        } else {
            double ratio = getWidth() / (rightX - leftX);
            startX = (float) ((startX - leftX) * ratio);
            endX = (float) ((endX - leftX) * ratio);
        }
        if (startX < 0){
            startX = 0;
        }
        if (startX>width){
            startX = width;
        }

        if (endX < 0){
            endX = 0;
        }
        if (endX>width){
            endX = width;
        }

        Logger.d("ArrowImageView", "Width: " + width);
        Logger.d("ArrowImageView", "PStartX: " + startX);
        Logger.d("ArrowImageView", "PEndX: " + endX);

        // 计算箭头头部的点
        float arrowHeadSize = 15; // 箭头头部大小
        float arrowAngle; // 箭头头部角度
        if (endX < startX) {
            arrowAngle = (float) Math.toRadians(135);
        } else {
            arrowAngle = (float) Math.toRadians(45);
        }

        float arrowX1 = endX - arrowHeadSize * (float) Math.cos(arrowAngle);
        float arrowY1 = arrowY - arrowHeadSize * (float) Math.sin(arrowAngle);

        float arrowX2 = endX - arrowHeadSize * (float) Math.cos(-arrowAngle);
        float arrowY2 = arrowY - arrowHeadSize * (float) Math.sin(-arrowAngle);

        // 绘制箭头头部
        paint.setStyle(Paint.Style.FILL); // 设置为填充样式
        canvas.drawLine(endX, arrowY, arrowX1, arrowY1, paint); // 绘制第一个箭头边
        canvas.drawLine(endX, arrowY, arrowX2, arrowY2, paint); // 绘制第二个箭头边
        canvas.drawLine(startX, arrowY, endX, arrowY, paint);

        // 计算差距
        String distanceText = String.format("距离: %.2f", distance); // 显示"距离: "

        // 绘制差距文本
        float textWidth = textPaint.measureText(distanceText);
        float textX = (startX + endX) / 2 - textWidth / 2;
        float textY = arrowY - 20; // 文本位置在箭头上方

        canvas.drawText(distanceText, textX, textY, textPaint);
    }
}
